package cn.genmer.test.security.designpatterns.observer.mysubject;

import cn.genmer.test.security.designpatterns.observer.Observer;
import cn.genmer.test.security.designpatterns.observer.Subject;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * 被观察者数据源具体实现 - 这里可以理解为气象站
 */
@Data
public class WeatherData implements Subject {
    // 气象站提供的信息
    // 温度
    private double temperature;
    // 气压
    private double presure;
    // 湿度
    private double humidity;
    // 观察者（订阅）列表
    private List<Observer> observers;

    // 构造方法初始化列表 - 组合
    public WeatherData(){
        observers = new ArrayList<>();
    }

    /**
     * 获取到最新的数据，设置并通知订阅者列表
     * @param temperature
     * @param presure
     * @param humidity
     */
    public void setData(double temperature, double presure, double humidity) {
        this.temperature = temperature;
        this.presure = presure;
        this.humidity = humidity;
        notifyObservers();
    }

    @Override
    public void registerObserver(Observer observer) {
        observers.add(observer);
    }

    @Override
    public void removeObserver(Observer observer) {
        if (observers.contains(observer)){
            observers.remove(observer);
        }
    }

    @Override
    public void notifyObservers() {
        for (Observer observer: observers){
            observer.update(getTemperature(),getPresure(),getHumidity());
        }
    }
}
